package com.qf.shiro2204.user.controller;

import com.qf.shiro2204.user.entity.User;
import com.qf.shiro2204.user.service.UserService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author dong
 * @since 2023-04-17
 */
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;


    @ResponseBody
    @PostMapping("/login")
    public HashMap<String, Object> login(String username, String password, boolean rememberMe) {

        // 1.使用 shiro提供的 api 进行用户登录操作

        // 1.1 获取shiro的核心对象 Subject， 该对象代表当前用户
        Subject subject = SecurityUtils.getSubject();

        // 1.2 准备参数 UsernamePasswordToken 对象
        // 第三个参数，是否开启shiro的免登录功能
        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password, rememberMe);

        // 1.3 使用 shiro的登录方法完成 登录过程
        subject.login(usernamePasswordToken);

        // 1.4 该用户的密码校验通过了，可以把当前用户的角色和选项查询出来
        User user = (User) subject.getPrincipal();
        List<String> roles = userService.getRoles(user);
        List<String> perms = userService.getPerms(user);
        user.setRoles(roles);
        user.setPerms(perms);

        // 2. 处理登录成功后的返回数据
        HashMap<String, Object> map = new HashMap<>();
        map.put("code", 1);
        map.put("msg", "登录成功");

        return map;

    }


    @PostMapping("/register")
    public String register(String username, String password) {

        // 调用service层代码，完成用户注册的逻辑
        userService.regist(username, password);

        // 注册成功后，重定向到login.html
        return "redirect:/login.html";
    }

}
